package com.sh.recursion;

/**
 * @ClassName Queue8
 * @Description TODO
 * @Author yaoqiang
 * @Date 2020/11/7 11:27
 * @Version 1.0
 */
public class Queue8 {
    int max=8;//八个皇后
    int[] array=new int[max];
    static int count=0;
    static int judgeCount=0;
    public static void main(String[] args) {
        Queue8 queue8 = new Queue8();
        queue8.check(0);
        System.out.println("判断有一共有"+judgeCount);
        System.out.println("解法有一共有"+count);
    }

    public void check(int n){
        if (n==max){
            print();
            return;
        }
        for (int i=0;i<max;i++){
            //先把该皇后放在第一列
            array[n]=i;
            //判断当放置第n个皇后到i时，是否冲突
            if (judge(n)){
                //不冲突放n+1个
                check(n+1);
            }//如果冲突，继续执行array(n)=i,即将第n个皇后，放置本行后移的位置
        }
    }

    private boolean judge(int n){
        judgeCount++;
        for (int i=0;i<n;i++){
            if (array[i]==array[n]|| Math.abs(array[n]-array[i])==Math.abs(n-i)){
                return false;
            }
        }
        return true;

    }

    /**
     * 将八个皇后打印出来
     */
    private void print(){
        count++;
        for (int i=0;i<max;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }

}
